package com.hrpc.proxy;

import com.hrpc.ReferenceConfig;
import com.hrpc.discovery.RegisterConfig;
import com.hrpc.hRpcBootStarp;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 代理工厂
 */
public class ProxyFactory {
    private static Map<Class,Object> cache=new ConcurrentHashMap<>();

    public static <T> T getProxy(Class<T> tClass){
        Object bean = cache.get(tClass);
        if(bean!=null){
            return (T) bean;
        }
        ReferenceConfig<T> referenceConfig=new ReferenceConfig();
        referenceConfig.setInterfaceRef(tClass);
        //代理做了什么？
        // 1.连接注册中心
        // 2.拉取服务列表
        // 3.选择一个服务并建立连接
        // 4.发送请求(携带一些信息：接口名，参数列表，方法的名字)
        hRpcBootStarp.getInstance()
                .application("first-rpc-consummer")
                .register(new RegisterConfig("zookeeper://127.0.0.1:2181"))
                .serialize("hessian")
                .compress("gzip")
                .group("master")
                .reference(referenceConfig);

        T t = referenceConfig.get();
        cache.put(tClass,t);
        return t;
    }
}
